<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//Ultima verificacion: 22-11-2014 ; 23-02-2015
class Institucion extends CI_Controller {
	//Metodo constructor de la clase
	function __construct(){
		parent::__construct();
		
		//Cargamos el helper form para poder utilizar todas las funciones de el, como subir archivos.
		$this->load->helper('form');
	}
	
	//Este metodo no se puede llamar con ajax
	//Este metodo se utiliza para que un usuario pueda visualizar los datos generales de su institucion escolar.
	//Ultima verificación: 22-09-2014
	function visualizar(){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion
		if($this->session->userdata('sesionIniciada') == 'Si'){
			//Cargo el modelo donde estan los datos de las instituciones
			$this->load->model('m_institucion');
			
			//Busco a la institucion que hay que visualizar
			$institucion = $this->m_institucion->get(1);
			
			//Le paso la institucion a visualizar a la vista
			$datos['institucion'] = $institucion;
			
			//Cargo la vista donde se visualiza la institucion y la guardo en una variable para pasarsela a la vista principal
			$datosPrincipal['vista'] = $this->load->view('v_instituciones_visualizar', $datos, true);
			
			//Cargo la vista principal con los datos de la vista para visualizar la institucion
			$this->load->view('v_sistema', $datosPrincipal);
		}else{
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo abre la pantalla con los datos de la institucion pasado por la url
	function abrirPantallaModificar($idInstitucion=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1')){
			//Segunda comprobacion: Que idInstitucion pasado sea numerico y mayor que cero.
			if(is_numeric($idInstitucion) && $idInstitucion>0){
				//Cargo el modelo donde estan los datos de las instituciones
				$this->load->model('m_institucion');
												
				//Busco a la institucion que hay que modificar
				$institucion = $this->m_institucion->get($idInstitucion);
				
				//Tercera comprobacion: Que la institucion pasada por la url sea existente
				if($institucion->num_rows() == 1){
					//Le paso el instituto a modificar a la vista
					$datos['institucionSel'] = $institucion;
					
					//Cargo el modelo donde estan los datos de las provincias
					$this->load->model('m_provincia');
					
					//Busco a todas las provincias y no solo las activas.
					$provincias = $this->m_provincia->buscar();
					
					//Le paso todas las provincias a la vista
					$datos['provincias'] = $provincias;
					
					//Cargo el modelo donde estan los datos de las localidades
					$this->load->model('m_localidad');
					
					//Busco si la institucion tiene seteada una localidad y provincia, y si es asi, busco todas las localidades de su provincia.
					$idProvinciaTemp = 0;					
					if(is_numeric($institucion->row()->idProvincia) && $institucion->row()->idProvincia>0){
						$idProvinciaTemp = $institucion->row()->idProvincia;					
					}
					
					//Busco a todas las localidades de la provincia de la institucion tanto activas como inactivas
					$restriccion = " AND localidad.idProvincia=".$idProvinciaTemp;
					
					//Busco a todas las localidades de la provincia en cuestion (Si es que existe una)
					$localidades = $this->m_localidad->buscar($restriccion);
					
					//Le paso todas las localidades a la vista
					$datos['localidades'] = $localidades;
					
					//Cargo la vista donde se muestra el formulario para modificar un instituto y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_instituciones_modificar',$datos, true);
					
					//Cargo la vista principal con los datos de la vista para modificar un instituto
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Este metodo realmente modifica los datos de una institucion
	function modificar($idInstitucion=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1')){	   
			//Segunda comprobacion: Que se haya pasado por post el nombre y la nota minima de la institucion a modificar. 
			//Ademas que se haya pasado por la url el id de la institucion a modificar
			if(is_numeric($idInstitucion) && $idInstitucion>0 && $this->input->post('nombre',true) != "" && $this->input->post('notaMinima',true)!= "" && is_numeric($this->input->post('notaMinima',true)) && $this->input->post('notaMinima',true)>=0){		
				//Cargo el modelo donde estan los datos de las instituciones
				$this->load->model('m_institucion');
				
				//Busco a la institucion que hay que modificar
				$institucion = $this->m_institucion->get($idInstitucion);
				
				//Tercera comprobacion: Que la institucion pasado por la url sea existente
				if($institucion->num_rows() == 1){
					//Guardamos el id del archivo actual. Cero si no tiene asignado ninguno
					$idArchivoActual = $institucion->row()->idArchivo;
					$idEscudoActual = $institucion->row()->idArchivoEscudo;
					
					//Resultado 0 quiere decir que nada se ha modificado
					$resultado = 0;
					
					//Cargo el modelo donde estan los datos de los archivos
					$this->load->model('m_archivo');
					
					//Detalles de las configuraciones de la imagen a subir
					$config['upload_path'] = "./archivosPrivados-FPCL3QFs6DkBHihS3aJI/instituciones/escudos";
					$config['allowed_types'] = 'gif|jpg|png|jpeg';
					$config['max_size'] = '10000';
					$this->load->library('upload', $config);
					
					$escudo = '';
					//Si no se subio la imagen hacer lo siguiente
					if (!$this->upload->do_upload('escudo')){
						$mensaje = 'No se ha subido ninguna imagen o su imagen est\u00e1 fuera de las especificaciones.';
					//Si se subio la imagen hacer lo siguiente
					}else{
						//Datos de la imagen subida
						$upload_data = $this->upload->data();
						$escudo = $upload_data['file_name'];
						$extensionArchivo = $upload_data['file_ext'];
						
						//Mensaje que se va a mostrar
						$mensaje = 'Se ha subido la imagen correctamente.';
						
						// Determine Content Type
						switch ($upload_data['file_ext']) {
						  case ".pdf": $ctype="application/pdf"; break; 
						  case ".exe": $ctype="application/octet-stream"; break; 
						  case ".zip": $ctype="application/zip"; break; 
						  case ".doc": $ctype="application/msword"; break; 
						  case ".xls": $ctype="application/vnd.ms-excel"; break; 
						  case ".ppt": $ctype="application/vnd.ms-powerpoint"; break; 
						  case ".gif": $ctype="image/gif"; break; 
						  case ".png": $ctype="image/png"; break; 
						  case ".jpeg": 
						  case ".jpg": $ctype="image/jpg"; break; 
						  default: $ctype="application/force-download"; 
						}
						
						//Si ya tenia archivo lo modificamos, si no tenia, creamos un nuevo registro en la base de datos
						$nuevoHash1 = random_string('alnum',20).$upload_data['file_ext'];
						
						if($idEscudoActual != 0){
							//Modificamos el archivo en la base de datos
							$resultado += $this->m_archivo->modificar($idEscudoActual, $nuevoHash1, $upload_data['file_name'], $upload_data['file_ext'], $ctype);
						}else{
							//Creamos el archivo en la base de datos
							$resultado += $this->m_archivo->crear($nuevoHash1, $this->session->userdata('idUsuarioLog'), "archivosPrivados-FPCL3QFs6DkBHihS3aJI/instituciones/escudos", $upload_data['file_name'], $upload_data['file_ext'], $ctype, 1, 1, $this->session->userdata('idUsuarioLog'));
							$idEscudoActual = $this->db->insert_id();
						}
					}
					
					//Detalles de las configuraciones del archivo a subir
					$config['upload_path'] = "./archivosPrivados-FPCL3QFs6DkBHihS3aJI/instituciones";
					$config['allowed_types'] = 'gif|jpg|png|jpeg|doc|docx|xls|xlsx|pdf|ppt|xppt|pps';
					$config['max_size'] = '10000';
					$this->upload->initialize($config);
					
					$archivo = '';
					//Si no se subio el archivo hacer lo siguiente
					if (!$this->upload->do_upload('archivo')){
						$mensaje = 'No se ha subido ning\u00fan archivo o su archivo est\u00e1 fuera de las especificaciones.';
					//Si se subio el archivo hacer lo siguiente
					}else{
						//Datos del archivo subido
						$upload_data = $this->upload->data();
						$archivo = $upload_data['file_name'];
						$extensionArchivo = $upload_data['file_ext'];
						
						//Mensaje que se va a mostrar
						$mensaje = 'Se ha subido el archivo correctamente.';
						
						// Determine Content Type
						switch ($upload_data['file_ext']) {
						  case ".pdf": $ctype="application/pdf"; break; 
						  case ".exe": $ctype="application/octet-stream"; break; 
						  case ".zip": $ctype="application/zip"; break; 
						  case ".doc": $ctype="application/msword"; break; 
						  case ".xls": $ctype="application/vnd.ms-excel"; break; 
						  case ".ppt": $ctype="application/vnd.ms-powerpoint"; break; 
						  case ".gif": $ctype="image/gif"; break; 
						  case ".png": $ctype="image/png"; break; 
						  case ".jpeg": 
						  case ".jpg": $ctype="image/jpg"; break; 
						  default: $ctype="application/force-download"; 
						}
						
						//Si ya tenia archivo lo modificamos, si no tenia, creamos un nuevo registro en la base de datos
						$nuevoHash2 = random_string('alnum',20).$upload_data['file_ext'];
						
						if($idArchivoActual != 0){
							//Modificamos el archivo en la base de datos
							$resultado += $this->m_archivo->modificar($idArchivoActual, $nuevoHash2, $upload_data['file_name'], $upload_data['file_ext'], $ctype);
						}else{
							//Creamos el archivo en la base de datos
							$resultado += $this->m_archivo->crear($nuevoHash2, $this->session->userdata('idUsuarioLog'), "archivosPrivados-FPCL3QFs6DkBHihS3aJI/instituciones", $upload_data['file_name'], $upload_data['file_ext'], $ctype, 1, 1, $this->session->userdata('idUsuarioLog'));
							$idArchivoActual = $this->db->insert_id();
						}
					}
					
					//Modificamos la institucion
					$resultado += $this->m_institucion->modificar($idInstitucion, $this->input->post('nombre',true), $this->input->post('facebook',true), $idEscudoActual, $this->input->post('descripcion',true), $this->input->post('localidad',true), $this->input->post('domicilio',true), $this->input->post('telefonoFijo',true), $this->input->post('fax',true), $this->input->post('email',true), $this->input->post('emailFacebook',true), $this->input->post('web',true), $idArchivoActual, $this->input->post('notaMinima',true));
					
					if($escudo != '')	echo("<script> window.parent.actualizarImagen('".base_url() .'archivo/hash/'.$nuevoHash1."');</script>");
					if($archivo != '')	echo("<script> window.parent.actualizarArchivo('".base_url() .'archivo/hash/'.$nuevoHash2."');</script>");
						
					if($resultado >= 1){
						echo("<script> alert('La instituci\u00f3n: ".$this->input->post('nombre',true)." se ha modificado correctamente.');</script>");
					}else{
						echo("<script> alert('La instituci\u00f3n: ".$this->input->post('nombre',true)." no se ha modificado. Ha habido un error o los datos permanecieron iguales.');</script>");
					}
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
}